package redecolaborativa.client;

import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.user.client.ui.TextBox;

public class VisualizarItem extends Composite {
	private final AbsolutePanel absolutePanel;
	private ScrollPanel painelGeral;
	private String idSessao, visualizador;
	private String nomeItem, informacoes;
	FachadaAsync fachada;
	TextBox nota;
	
	public VisualizarItem(final ScrollPanel painelGeral, String visualizador, final String informacoes, final String idSessao, final String nomeItem, final FachadaAsync fachada) {
		this.fachada = fachada;
		this.idSessao = idSessao;
		this.nomeItem = nomeItem;
		this.informacoes = informacoes;
		this.painelGeral = painelGeral;
		this.visualizador = visualizador;

		absolutePanel = new AbsolutePanel();
		initWidget(absolutePanel);
		absolutePanel.setSize("582px", "220px");
		
		Label lblNota = new Label("Nota:");
		absolutePanel.add(lblNota, 398, 154);
				
		nota = new TextBox();
		absolutePanel.add(nota, 441, 145);
		nota.setSize("55px", "16px");
		
		iniciaLabels();
		inicialResultadoDosLabels();
		vizualizarPerfil();
		pedirEmprestado();
		atribuirNota();
	}
	
	private void vizualizarPerfil() {
		Button btnVisualizarPerfil = new Button("Visualizar Perfil do Dono");
		absolutePanel.add(btnVisualizarPerfil, 411, 35);
		btnVisualizarPerfil.setSize("158px", "28px");
		btnVisualizarPerfil.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				painelGeral.clear();
				painelGeral.add(new Perfil(fachada, painelGeral, idSessao, visualizador, informacoes.split("-")[3]));
			}
		});
	}
	
	private void pedirEmprestado() {
		Button btnPedirEmprestado = new Button("Pedir Emprestado");
		btnPedirEmprestado.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				String tempoPrevisto = Window.prompt("Digite o tempo previsto do emprestimo: ", "0");
				try {
					fachada.pedirEmprestado(idSessao, nomeItem, Integer.parseInt(tempoPrevisto), new AsyncCallback<Void>() {
						@Override
						public void onSuccess(Void result) {
							Window.alert("Pedido de emprestimo realizado com sucesso!");
						}
						@Override
						public void onFailure(Throwable caught) {
							Window.alert("Pedido de emprestimo realizado com sucesso!");
						}
					});
				} catch (Exception e) {
					Window.alert(e.getMessage());
				}
			}
		});
		absolutePanel.add(btnPedirEmprestado, 411, 72);
		btnPedirEmprestado.setSize("158px", "28px");
	}
	
	private void atribuirNota() {
		Button btnAtribuir = new Button("Atribuir");
		btnAtribuir.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				fachada.avaliarItem(idSessao, nomeItem, Float.parseFloat(nota.getText()), new AsyncCallback<Void>() {
					@Override
					public void onSuccess(Void result) {
						Window.alert("Nota atribuida com sucesso!");
					}
					@Override
					public void onFailure(Throwable caught) {
						Window.alert("Nota atribuida com sucesso!");
					}
				});
			}
		});
		absolutePanel.add(btnAtribuir, 512, 145);
				
	}
	
	private void inicialResultadoDosLabels() {
		String nomeItem = informacoes.split("-")[0];
		String desc = informacoes.split("-")[1];
		String cat = informacoes.split("-")[2];
		String dono = informacoes.split("-")[3];
		String notaItem = informacoes.split("-")[4];
		
		Label lbItem = new Label(nomeItem);
		absolutePanel.add(lbItem, 50, 10);
		
		Label lbCategoria = new Label(cat);
		absolutePanel.add(lbCategoria, 89, 35);
		
		Label lbDescricao = new Label(desc);
		absolutePanel.add(lbDescricao, 91, 60);
		lbDescricao.setSize("252px", "65px");
		
		Label lbDono = new Label(dono);
		absolutePanel.add(lbDono, 56, 156);
		
		Label lbNota = new Label(notaItem);
		absolutePanel.add(lbNota, 220, 181);
	}
	
	private void iniciaLabels() {
		Label lblItem = new Label("Item: ");
		lblItem.setStyleName("caption-panel");
		absolutePanel.add(lblItem, 10, 10);
		
		Label lblNewLabel = new Label("Categoria: ");
		lblNewLabel.setStyleName("caption-panel");
		absolutePanel.add(lblNewLabel, 10, 35);
		
		Label lblDescricao = new Label("Descricao:");
		lblDescricao.setStyleName("caption-panel");
		absolutePanel.add(lblDescricao, 10, 60);
		
		Label lblDono = new Label("Dono:");
		lblDono.setStyleName("caption-panel");
		absolutePanel.add(lblDono, 10, 156);
		
		Label lblUltimaNotaAtribuida = new Label("Ultima nota atribuida ao item:");
		lblUltimaNotaAtribuida.setStyleName("caption-panel");
		absolutePanel.add(lblUltimaNotaAtribuida, 10, 181);
	}
}